function calcularMmRiegoOptimizado() {
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const hojaDatos = ss.getSheetByName('datos usuarios');
  const hojaRiego = ss.getSheetByName('Hoja 1');

  // Leer superficies por sensor
  const datosUsuarios = hojaDatos.getRange(2, 1, hojaDatos.getLastRow() - 1, 4).getValues();
  const superficiePorSensor = {};
  datosUsuarios.forEach(row => {
    const sensor = row[0];
    const superficie = row[3];
    if (sensor && superficie) {
      superficiePorSensor[sensor] = superficie;
    }
  });

  // Leer datos actuales de riego
  const ultimaFila = hojaRiego.getLastRow();
  const datos = hojaRiego.getRange(2, 3, ultimaFila - 1, 4).getValues(); // columnas C (nombre), D (pulsos), E (litros), F (mm existentes)

  const resultados = [];

  for (let i = 0; i < datos.length; i++) {
    const nombre = datos[i][0];
    const litros = datos[i][2];
    const mmActual = datos[i][3];

    // Solo calcular si aún no tiene valor en la columna F
    if (mmActual === '' || mmActual === null) {
      const superficie = superficiePorSensor[nombre];

      if (superficie) {
        resultados.push([litros / superficie]);
      } else {
        resultados.push([null]);
      }
    } else {
      resultados.push([mmActual]); // mantener el valor ya existente
    }
  }

  // Sobrescribir solo la columna F (mm)
  hojaRiego.getRange(2, 6, resultados.length, 1).setValues(resultados);

  Logger.log("Cálculo optimizado completado.");
}

